package com.project.demo.config;

import com.project.demo.interceptor.LoginInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 */
@Configuration
@Slf4j
public class WebAppConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //登录拦截的管理器
        InterceptorRegistration registration = registry.addInterceptor(loginInterceptor());
        //拦截的地址
        registration.addPathPatterns("/**");
        //方行的地址
//        registration.excludePathPatterns("/**");
        //根据需要拦截，一般设置所有地址拦截，放行公共连接
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 配置CORS跨域支持
        // 注意：为了支持局域网访问，我们完全依赖LoginInterceptor来动态设置CORS头
        // 这样可以支持allowCredentials=true的同时允许所有来源（包括局域网IP）
        // 这里不设置allowedOrigins，让拦截器来处理
        registry.addMapping("/**")  // 允许所有路径
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH", "HEAD")  // 允许的HTTP方法
                .allowedHeaders("*")  // 允许所有请求头（包括content-type和x-auth-token）
                .maxAge(3600);  // 预检请求的缓存时间（秒）
        
        // 注意：实际的CORS头由LoginInterceptor动态设置
        // LoginInterceptor会根据请求的Origin动态设置Access-Control-Allow-Origin
        // 这样可以支持allowCredentials=true的同时允许所有来源（包括局域网IP）
    }

    @Bean
    public LoginInterceptor loginInterceptor(){
        return new LoginInterceptor();
    }

}
